package vo

// FileTaskRequest 表示文件任务的通用结构体
// 上传、下载、更新任务时都返回该结构
type FileTaskRequest struct {
	TaskID           int64  `json:"task_id"`              // 任务ID
	FileName         string `json:"file_name"`            // 文件名称
	FileType         string `json:"file_type"`            // 上传(upload)/下载(download)
	Status           string `json:"status"`               // pending、running、success、failed
	Message          string `json:"message"`              // 提示信息
	LocalPath        string `json:"local_path,omitempty"` // 原文件路径（仅上传时保存）
	TotalChunks      int    `json:"total_chunks"`         // 总分片数
	UploadedChunks   int    `json:"uploaded_chunks"`      // 已上传分片数
	DownloadedChunks int    `json:"downloaded_chunks"`    // 已下载分片数
}

// BaseResponse 统一响应结构体
type BaseResponse struct {
	Code    int         `json:"code"`    // 0 表示成功，非0表示错误
	Message string      `json:"message"` // 提示或错误信息
	Data    interface{} `json:"data"`    // 返回数据，可为任意类型
}

// UploadRequest 上传接口请求体（后端自动分片）
type UploadRequest struct {
	FilePath  string `json:"file_path"`  // 本地文件路径（后端读取）
	ChunkSize int    `json:"chunk_size"` // 分片大小（字节），可选，默认1MB
}

// DownloadRequest 下载接口请求体（后端自动分片）
type DownloadRequest struct {
	FileName  string `json:"file_name"`  // 要下载的文件名
	ChunkSize int    `json:"chunk_size"` // 每片大小（字节），可选，默认1MB
	SavePath  string `json:"save_path"`  // 保存完整文件的目标路径（绝对路径或相对路径）
}

// DeleteRequest 删除文件/任务请求体
type DeleteRequest struct {
	FileName string `json:"file_name"` // 要删除的文件名
}

// UpdateRequest 修改任务信息请求体
type UpdateRequest struct {
	TaskID      int64  `json:"task_id"`                 // 任务ID
	NewFileName string `json:"new_file_name,omitempty"` // 新文件名，可选
	NewStatus   string `json:"new_status,omitempty"`    // 新状态，可选
	NewMessage  string `json:"new_message,omitempty"`   // 新备注信息，可选
}

// GetTaskRequest 获取任务详情请求体
type GetTaskRequest struct {
	TaskID int64 `json:"task_id"` // 任务ID
}

// ListFilesRequest 获取文件列表请求体
type ListFilesRequest struct {
	Page     int `json:"page"`      // 页码（从1开始）
	PageSize int `json:"page_size"` // 每页数量
}

// FileInfo 文件信息结构
type FileInfo struct {
	Name string `json:"name"` // 文件名
	Size int64  `json:"size"` // 字节数
}

// ListFilesResponse 返回的分页数据
type ListFilesResponse struct {
	Total    int        `json:"total"`     // 总文件数
	Page     int        `json:"page"`      // 当前页码
	PageSize int        `json:"page_size"` // 每页数量
	Files    []FileInfo `json:"files"`     // 当前页文件信息
}

// updateFileRequest 修改已上传文件名请求
type UpdateFileRequest struct {
	OldFileName string `json:"old_file_name"` // 原文件名
	NewFileName string `json:"new_file_name"` // 新文件名
}

// DeleteTaskRequest 删除任务请求体
type DeleteTaskRequest struct {
	TaskID int64 `json:"task_id"`
}

// DeleteFileRequest 删除文件请求体
type DeleteFileRequest struct {
	FileName string `json:"file_name"`
}

// DownloadFromURLRequest 支持分块的远程下载
type DownloadFromURLRequest struct {
	URL       string `json:"url"`        // 远程文件URL
	SavePath  string `json:"save_path"`  // 保存路径（默认 download/）
	ChunkSize int64  `json:"chunk_size"` // 分片大小（字节），默认1MB
}
